# 【tkinter 循环添加的button】https://www.codenong.com/cs106051035/
# 【setwindowspos方法】https://blog.csdn.net/kongfuxionghao/article/details/11663867
# 安装【tkinter,threading自带;pywin32==306;pyautogui==0.9.54;pynput==1.7.7;pyperclip==1.9.0】
# 修改【路径：键盘键值表.png；文字识别umiocr.exe；qcode_2.py；】

# win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, x,y,w,h, win32con.SWP_SHOWWINDOW)#设置句柄窗口的位置和大小
# temp0=([170,30])#浏览器窗口的标签上的一点
# def get_all_hwnd(hwnd,mouse):#历遍句柄、窗口
# def mousepos1():#win32api.GetCursorPos()获取光标的位置，以屏幕坐标表示。
# def mousepos2():#win32api.SetCursorPos(temp)#设置光标位置
# def getpos(n1,n2):#win32api.SetCursorPos([n1,n2])#设置光标位置
# def diaoqu():#调取选定的句柄、窗口
# def yincang():#隐藏窗口
# def leftclick(temp0=None):#左键单击
# def rightclick(temp0=None):#右键单击
# def zhongdian():#点击选定窗口的中点【用于视频播放、停止】
# def presskey(kv1,kv2=None ,kv3=None ):#按键
# def getmousehwnd():#print('2s后获取鼠标处的窗口句柄')

# def opt_yemian(kv1,kv2=None,kv3=None):#调取窗口，并按键
# def opt_qudian():#取点，窗口弹出获取鼠标位置
# def opt_xiazhang():#点击下章的位置，并朗读
# def opt_xiaji():#点击下集的位置，
# def opt_xiahua():#点击下话的位置，
# def opt_congcichu():#从此处朗读，手动按下文本，4s后朗读
# def on_press(key):#按下esc键，
# def on_click(x,y,button,pressed):#按下右键，
# def lianxupress(n):#连续按下键【n为键值】，监听鼠标被按下
# def appear(index, letter):#所有按钮的事件，0——8,9——17,18——26,27——35

# 1朗读小说：输入当前标签句柄，取next点，点击下章，朗读【从此处朗读】
# 2解析二维码：qcode_2.py，按esc完成解析。
# 3打开umiocr并识别文字：win+alt+c。
# 4取窗口句柄

# 
# 默认
# 鼠标点击方法1，mouse.
# 鼠标点击方法2，win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
# 页面操作，都在leftclick(),rightclick()，定义mouseclick()
# if check_vars[0].get()==1:#判断单选框是否被勾选

from tkinter import Tk, Button, GROOVE,Toplevel,Label,messagebox,Listbox,Scrollbar #tk.GROOVE：创建带凹槽的边框效果。
import tkinter as tk
import win32api
import win32gui
import win32con
import time
import os
import pyautogui
from pynput import keyboard,mouse
import threading #使用线程(threading)模块实现多线程处理
import pyperclip as ppr
# import subprocess
# import _GETHWND

# 【窗口】
root = Tk()
root.title("win32控制界面V1.0")    # 设置窗口标题
# root.geometry("300x100")#字母x
root.geometry("+0+750")#定位0×0+900+300窗口设置为300x100的尺寸,与屏幕最左边相隔20像素,与屏幕最上方相隔50像素
root.attributes('-topmost', True) # note - before topmost【将其设置为最高(但它将始终位于其他位置的前面)

frame1 = tk.Frame(root, height=40)#bg="blue")
frame1.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
frame2 = tk.Frame(root, bg="yellow")
frame2.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

# 【标签+文本框】
labels=['','','','查','下翻时']
entries={}
entry_var=[]
for i in range(5):
#     label = tk.Label(frame1, text=f"Label {i}")#label1,2,3,4,5
    label=tk.Label(frame1,text=labels[i])
    label.pack(side=tk.LEFT, padx=0, pady=0)
    labels.append(label)
    entry_var = tk.StringVar(value='')
    entry = tk.Entry(frame1,width=3,textvariable=entry_var)
    entry.pack(side=tk.LEFT, padx=0, pady=0)
#     entries.append(entry)【都是entries[i]=entry】
    entries[f"entry_{i}"] = entry_var#【变量名为entry_0,1,2,3,4】
# entry_var.set('0')#【entry_var才是文本框里的值,最后一个？？】
entries['entry_4'].set('2')


# 【标签+选择框】
check_vars=[]
checkboxes=['ctrl+','右键','','','']#checkboex[2]
for i in range(5):#0-4
    check_var = tk.IntVar(value=0)
#     checkbox = tk.Checkbutton(frame1, text=f"Checkbox {i}", variable=check_var)
    checkbox = tk.Checkbutton(frame1, text=checkboxes[i], variable=check_var)
    checkbox.pack(side=tk.LEFT, padx=0, pady=0)

    checkboxes.append(checkbox)
    check_vars.append(check_var)
def check_judge():#判断单选框是否被勾选——【没有必要！！】
    if check_vars[0].get()==1:
        # 定义常量
        VK_A = 0x11  # 0x41 A键的键码,0x11 Ctrl键
        KEYEVENTF_KEYUP = 0x0002  # 松开按键标识位
        # 按下指定键
        win32api.keybd_event(VK_A, 0, 0, 0)
        time.sleep(3)  # 持续3秒
        # 松开指定键
        win32api.keybd_event(VK_A, 0, KEYEVENTF_KEYUP, 0)
#     if check_vars[1].get()==1:
#         pass
#     if check_vars[2].get()==1:
#         pass
#     if check_vars[3].get()==1:
#         pass
#     if check_vars[4].get()==1:
#         pass
    
# 【获取句柄】
# def gethwnd():
    # 1、遍历windows下 所有句柄及窗口名称
hwnd_title = dict()#定义窗口标题为字典
def get_all_hwnd(hwnd,mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})
win32gui.EnumWindows(get_all_hwnd, 0)

        
# '''窗口显示句柄，输入后，点击确定'''
# rot=Tk()
# rot.title('所有可见窗口句柄+标题')
# rot.geometry("500x200+0+0")#('300*200+0+0'不行？？？)
# rot.list2 = Listbox(rot)#, width=10,height =10,exportselection=True)
# rot.list2.pack(fill='x', side='top')
# sb2=Scrollbar(rot, orient='horizontal')#【大写不行】
# sb2.pack(side = 'bottom', fill='x', anchor='s')
# sb2.config(command = rot.list2.xview)

for h,t in hwnd_title.items():
    if t is not "":#不包括title为空
#     if t is not None:#包括title为空
#         rot.list2.insert(str(h),t)
        print(h,t)
# rot.mainloop() 必须关闭列表框才能继续下一步！！
# messagebox.showinfo('全部窗口',hwnd_title)
hwnd=int(input("请输入播放的窗口句柄："))
if hwnd!=0:#输入0，仅用于调试
    win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)#【默认大小显示，
    win32gui.MoveWindow(hwnd, 0, 0, 1000, 750, True)#【不能再最小化，所以联合使用


# 获取要控制的窗口
# hwnd= 1122024#【根据得到的h列表，自己输入要显示的窗口的句柄】【浏览器窗口，下一章，不影响】
# # hwnd=int(input("【0420pywin32获取窗口句柄+标题】输入句柄："))
# # 将当前窗口缩放至指定位置及大小
# win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)#【默认大小显示，
# win32gui.MoveWindow(hwnd, 0, 0, 1000, 500, True)#【不能再最小化，所以联合使用


temp0=([170,30])
# left, top, right, bottom = win32gui.GetWindowRect(hwnd)
# # win32api.SetCursorPos([int(left+170),int(top+30)])#设置位置
# temp0=([int(left+170),int(top+30)])#【root左上角0,0】
print('取窗口标签1点',temp0)

# 一、操作元素
def mousepos1():
    ([x0,y0])=win32api.GetCursorPos()#获取位置【需要中间量！！】
    global temp#【必须def 内部global,否则未定义】
    temp=[x0,y0]
#     print([x0,y0])#打印成功
def mousepos2():
    win32api.SetCursorPos(temp)#设置位置
#     print(temp)#成功
#     print([x0,y0])【未定义】
# def dingwei1():
#     # 获取窗口左上角坐标和右下角坐标
#     left, top, right, bottom = win32gui.GetWindowRect(hwnd)
#     win32api.SetCursorPos([int(left+170),int(top+30)])#设置位置
# def dingwei2():
#     # 获取窗口左上角坐标和右下角坐标
#     left, top, right, bottom = win32gui.GetWindowRect(hwnd)
#     win32api.SetCursorPos([int(right-15),int((top+bottom)/2)])#设置位置
def diaoqu():#调取选定的句柄、窗口
    win32gui.SetForegroundWindow(hwnd)#【激活打开窗口？】不必要，也能置顶，
    win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)#默认显示大小位置

def yincang():
    win32gui.SetForegroundWindow(hwnd)
    win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
def getpos(n1,n2):
    win32api.SetCursorPos([n1,n2])  #数值[水平位置，垂直位置]【截图工具得到
def leftclick(temp0=None):
    if temp0 is not None:
        win32api.SetCursorPos(temp0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    else :
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
def rightclick(temp0=None):
    if temp0 is not None:
        win32api.SetCursorPos(temp0)
        win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    else:
        win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
def mouseclick(temp0=None):#由checkbox判断切换左右键
    if check_vars[1].get()==1:#左右键的选择框的判断,如果选中，则默认右键为主
        if temp0 is not None:
            win32api.SetCursorPos(temp0)
            win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
        else:
            win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)        
    else:
        if temp0 is not None:
            win32api.SetCursorPos(temp0)
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        else :
            win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        
    
    

def zhongdian():
    mousepos1()#zhongjian
    diaoqu()
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    win32api.SetCursorPos([int((left+right)/2),int((top+bottom)/2)])#设置位置
#     leftclick()
    mouseclick()
#     win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    mousepos2()
def presskey(kv1,kv2=None ,kv3=None ):
    win32api.keybd_event(kv1, 0, 0, 0) #按下
    if kv2 is not None :
        win32api.keybd_event(kv2, 0, 0, 0) #按下
        if kv3 is not None :
            win32api.keybd_event(kv3, 0, 0, 0) #按下
            win32api.keybd_event(kv3, 0, win32con.KEYEVENTF_KEYUP, 0) 
        win32api.keybd_event(kv2, 0, win32con.KEYEVENTF_KEYUP, 0) 
    win32api.keybd_event(kv1, 0, win32con.KEYEVENTF_KEYUP, 0) 
# def popup(str1):
#     popup=Toplevel() #定义顶级窗口
#     popup.title("2s后获取鼠标位置")
#     popup.geometry("200x100")
#     popup_label = Label(popup, text=str1)
#     popup_label.pack(pady=10)
#     # 自动关闭弹窗
#     popup.after(2000, popup.destroy)#毫秒
def getmousehwnd():
#     print('2s后获取鼠标处的窗口句柄')
    time.sleep(2)
    x, y = win32api.GetCursorPos()
    # 获取鼠标所在的窗口句柄
    hwnd = win32gui.WindowFromPoint((x, y))
    # 获取整个窗口句柄
    parent_hwnd = win32gui.GetParent(hwnd)
    messagebox.showinfo('句柄',"窗口："+str(hwnd)+'\n'+"父窗口："+str(parent_hwnd))
#     print("鼠标窗口句柄：", hwnd)
#     print("鼠标窗口的父窗口句柄：", parent_hwnd)

# 二、按钮事件
def opt_yemian(kv1,kv2=None,kv3=None):
    mousepos1()
    diaoqu()
#         rightclick(temp0)
    presskey(kv1,kv2=None,kv3=None)
    mousepos2()
def opt_qudian():
    time.sleep(2)
    mousepos1()
    messagebox.showinfo('鼠标位置',temp)
def opt_xiazhang():
    time.sleep(0.5)
    mousepos1()
    diaoqu()
    presskey(35)#end
    time.sleep(1)
    try:
#         rightclick(tempnext)#右为左
#         leftclick(tempnext)#左为左
        mouseclick(tempnext)
        time.sleep(2)
        diaoqu()
        presskey(17,16,85)#ctrl+shift+u【要按tab4次才能yemian】
#         time.sleep(1)
#         win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
#         mousepos2()
    except :
        messagebox.showwarning('警告','先定义下一章的位置！！')
def opt_xiaji():
    mousepos1()
    diaoqu()
    presskey(36)#home
    time.sleep(0.2)
#     presskey(34)#下页
#     time.sleep(0.5)
    try:
#         rightclick(tempnext)#右为左
#         leftclick(tempnext)#左为左
        mouseclick(tempnext)
#         time.sleep(2)
#         presskey(17,16,85)#ctrl+shift+u
#         time.sleep(1)
#         win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
        mousepos2()
    except :
        messagebox.showwarning('警告','先定义下一集的位置！！')

def opt_xiahua():
    mousepos1()
    diaoqu()
    presskey(35)#end
    time.sleep(0.2)
    presskey(35)#end
    time.sleep(0.5)
    try:
#         rightclick(tempnext)#右为左
#         leftclick(tempnext)#左为左
        mouseclick(tempnext)
#         time.sleep(2)
#         presskey(17,16,85)#ctrl+shift+u
#         time.sleep(1)
#         win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
        mousepos2()
    except :
        messagebox.showwarning('警告','先定义下一话的位置！！')
        
def opt_congcichu():
    mousepos1()
    diaoqu()#前两行为了显示页面
    time.sleep(3)#给时间 手动按下文本
    presskey(40)#down
    presskey(40)
    time.sleep(0.2)
    presskey(13)#enter
    time.sleep(0.2)
    presskey(40)#down
    presskey(40)
    presskey(40)#down
    presskey(40)
    presskey(40)#down
    time.sleep(0.2)
    presskey(13)#enter
    

        
def on_press(key):
    try:
        if key == keyboard.Key.esc:#esc按键
#             print('ESC键被按下，程序将退出')#按下喝释放了，共两次？？
            return False  # 返回False来停止监听器
    except AttributeError:
        pass
def on_click(x,y,button,pressed):#用于？？？
    try:
        if button==mouse.Button.right:
#             if pressed:
#                 print("右键按下")
#             else:
#                 print("右键释放")
#             print('右键被按下，程序将退出')
            return False  # 返回False来停止监听器
    except AttributeError:
        pass
    
def lianxupress(n):#【n为键值】
    listener = mouse.Listener(on_click=on_click)#某鼠标键被按下
#         listener = keyboard.Listener(on_press=on_press)#某按键被按下
#         threading.Thread(target=自定义的函数名)
    listener.start()
    while listener.running:
        # 程序一直循环，直到被停止
        diaoqu()
        presskey(n)
#         presskey(34)#下页
#             time.sleep(int(entries[5].get()))#【】
        time.sleep(float(entries['entry_4'].get()))#【int是整数，entries['entry_4'].get()文本框内容】
        pass
    listener.join()
    
def appear(index, letter):#所有按钮的事件，0——8,9——17,18——26,27——35
    if index==0:
        presskey(175)#yin_jia，音+
    elif index==1:
        presskey(174)#yin_jian，音-
    elif index==2:
        presskey(173)#yin_jing，音×
#         win32api.keybd_event(173, 0, 0, 0)#静音
#         win32api.keybd_event(173, 0, win32con.KEYEVENTF_KEYUP, 0)         
    elif index==3:
        opt_yemian(36)#home
    elif index==4:
        opt_yemian(38)#shang，上
    elif index==5:
        opt_yemian(35)#end
    elif index==6:
        diaoqu()#xianshi，显示
    elif index==7:       
        yincang()#yincang，隐藏
    elif index==8:
        opt_yemian(116)#shua()，刷新
    elif index==9:
        presskey(91)#WIN
        win32api.SetCursorPos([175,210])
    elif index==10:
#         presskey(27)#esc
        exit()#关闭程序
    elif index==11:#space,停止、播放
        diaoqu()
        presskey(32)#空格space
    elif index==12:
        opt_yemian(37)#zuo，左
    elif index==13:
        opt_yemian(40)#xia，下
    elif index==14:
        opt_yemian(39)#you，右
    elif index==15:
        opt_qudian()#qunext，取点next
        global tempnext#【取点，下一个。一次即可】
        tempnext=temp
    elif index==16:
        opt_xiazhang()#xiazhang，下章
    elif index==17:
#         opt_yemian(17,16,85)#langdu，朗读
        diaoqu()
        presskey(17,16,85)
    elif index==18:#tab
#         check_judge()【先按住ctrl3秒后才继续！！】
        if check_vars[0].get()==1:
            win32api.keybd_event(0x11, 0, 0, 0)# 按下指定键，0x11 ctrl
            time.sleep(0.5)
            opt_yemian(9)#TAB
            win32api.keybd_event(0x11, 0, 0x0002, 0)# 松开指定键
        else:
            opt_yemian(9)#TAB
#     elif index==19:#space
#         opt_yemian(19)#键盘上的pau按键，
    elif index==20:
        presskey(17,16,27)#renwulan，任务栏
    elif index==21:
        opt_yemian(33)#shangfan，上翻
    elif index==22:
        zhongdian()#调取并点击窗口，中点
    elif index==23:
        opt_yemian(34)#xiafan，下翻
    elif index==24:
        getmousehwnd()#quchuang，取窗口
    elif index==25:
        opt_xiaji()#xiaji，下集
    elif index==26:
#         t=threading.Thread(target=lianxupress(34))#, args=('Thread 1',))
        lianxupress(34)#调取，连续下翻
#         t.start()
#         t.join()

    elif index==27:#二维码识别
        try:
            import qcode_2
            qcode_2.jietu()
            qcode_2.jiema()
            qcode_2.fuzhi()
#             messagebox.showwarning("警告",qcode_1.jiama())
        except :
            messagebox.showerror('出错!!!')#qcode,opencv,cv2
    elif index==28:
        os.popen(r'"E:\PCpackage\Umi-OCR_Rapid_v2.1.2\Umi-OCR.exe"')#打开软件，有效
        presskey(91,18,67)#umiocr，屏幕截图，快捷键win+alt+c
    elif index==29:
#         os.popen(r'"G:\PC package\thonny-4.0.1\Project\Pywin32 EX\键盘键值表.png"')
        os.popen('键盘键值表.png')
    elif index==30:#键a，减速，无效
        mousepos1()
        diaoqu()
        pyautogui.press('A')
        time.sleep(0.5)
        presskey(65)#a
        time.sleep(0.5)
        opt_yemian(65)
        mousepos2()
    elif index==31:#键s，原速，无效
        mousepos1()
        diaoqu()
        presskey(83)
        mousepos2()
    elif index==32:#键d，加速，无效
        mousepos1()
        diaoqu()
#         rightclick(temp0)
        time.sleep(0.5)
        win32api.keybd_event(68, 0, 0, 0)#加速d
        win32api.keybd_event(68, 0, win32con.KEYEVENTF_KEYUP, 0)
        mousepos2()
    elif index==33:
        opt_qudian()#qudian，取点，显示鼠标位置
    elif index==34:
        opt_xiahua()#下话
    elif index==35:#页面查找文字
        print(entries['entry_3'].get())#获取文本框内容
        ppr.copy(entries['entry_3'].get())
        opt_yemian(17,70)#ctrl+f无效？？
        presskey(17,70)#两行一起，成功
#         ppr.paste()#pyperclip粘贴,只有一次成功?
        presskey(17,86)#ctrl+v,成功
#         win32gui.SendMessage(win32con.WM_SETTEXT, None, 'hello')出错TypeError: 'NoneType' object cannot be interpreted as an integer
    elif index==43:#指定大小
#     win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, x,y,cx,cy, win32con.SWP_SHOWWINDOW)
        win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 0,0,600,600, win32con.SWP_SHOWWINDOW)#位置+大小
        win32gui.SetForegroundWindow(hwnd)#【激活】
        win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
#     HWND_TOPMOST:将窗口置于所有非顶层窗口之上。【即使窗口未被激活窗口也将保持顶级位置】。
#   x：以客户坐标指定窗口新位置的左边界。
#   Y：以客户坐标指定窗口新位置的顶边界。
#   cx:以像素指定窗口的新的宽度。
#   cy：以像素指定窗口的新的高度。
#   SWP_SHOWWINDOW：显示窗口
    elif index==44:#从此处开始朗读，单击页面获取鼠标位置，长按，右键
        opt_congcichu()
        

# 按钮标题list【0-8, 9-17, 18-26, 27-35】
letters = ["音+", "音-", "音×", "Home", "上", "End", "显示", "隐藏", "刷新",
           "Win","Exit","停/播","左","下","右","取next","下章","朗读",
           "Tab","-","任务","上翻","中点","下翻","取窗","下集","连下翻",
           "qcode","umi识","键值","减速","原速","加速","取点","下话","查找",
           "-","-","-","-","-","-","-","缩小","从此读"]


buttons = []
for index in range(len(letters)):#列表的元素数
    n = letters[index]#n是字母,[text=n],index才是数字
#     print(n)一次性打印9个字母
    button = Button(frame2, bg="White", text=n, width=5, height=1, relief=GROOVE,
                    command=lambda index=index, n=n: appear(index, n))
    if hwnd==0:
        if index%9==3 or int(index)%9==4 or int(index)%9==5:#【成功】
            button.config(state='disable')
    
# for index in range(len(letters)):#列表的元素数
# #     button = Button(root, bg="White", text=n, width=5, height=1, relief=GROOVE,
# #                     command=lambda index=index, n=n: appear(index, n))
#     button.pack()
#     if hwnd==0:
#         if index%9!=3:#|int(index)%9!=4|int(index)%9!=5:#【不显示中间3个】
#             button.config(state='normal')
# .grid()通过将窗口拆分Frame为行或列来工作。
# 你可以通过分别调用.grid()行和列索引并将其传递给row和column关键字参数来指定小部件的位置。
#     button.grid(padx=2, pady=2, row=index % 5, column=int(index / 3))#【padx填充,%取余数】
    button.grid(column=index % 9,row=int(index/9))
    buttons.append(button)#批量生成按钮
    

if __name__=='__main__':
#     之外的会先运行一次，再生成窗口
#     try:无法解决未输入hwnd导致的错误
# #         appear()
#         root.mainloop()
#     except :
#         print('出错！！！')
    root.mainloop()